package org.linlinjava.litemall.db.util;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;

import java.util.*;
import java.util.function.Consumer;

/**
 * Map 工具类，封装常用 Map 处理操作
 * 使用 Hutool 工具包增强可读性
 */
public class MapUtils {

    /**
     * 从 multimap 中取出 keys 对应的所有 value（合集）
     *
     * @param multimap 多值 Map，如 Map<K, List<V>>
     * @param keys     目标 key 集合
     * @return 所有匹配的 value 合集
     */
    public static <K, V> List<V> getList(Map<K, ? extends Collection<V>> multimap, Collection<K> keys) {
        List<V> result = new ArrayList<>();
        if (CollUtil.isEmpty(multimap) || CollUtil.isEmpty(keys)) {
            return result;
        }

        keys.forEach(key -> {
            Collection<V> values = multimap.get(key);
            if (CollUtil.isNotEmpty(values)) {
                result.addAll(values);
            }
        });
        return result;
    }

    /**
     * 如果 map 中存在 key 且对应的值非 null，则执行 consumer
     *
     * @param map      待查找的 map
     * @param key      键
     * @param consumer 对应值的消费逻辑
     */
    public static <K, V> void findAndThen(Map<K, V> map, K key, Consumer<V> consumer) {
        if (CollUtil.isEmpty(map) || ObjectUtil.isNull(key) || consumer == null) {
            return;
        }
        V value = map.get(key);
        if (ObjectUtil.isNotNull(value)) {
            consumer.accept(value);
        }
    }

}